//package com.learning.rocketmq.demo;
//
//import com.alibaba.fastjson.JSON;
//import com.lotso.web.common.utils.DateUtil;
//import com.lotso.web.common.utils.SFSerialNoUtil;
//import com.lotso.web.common.utils.VerifyDuplicateRuleUtil;
//import com.lotso.web.module.rocketmq.constant.ENUM_BUSINESSTYPE;
//import com.lotso.web.module.rocketmq.constant.ENUM_MQSTATE;
//import com.lotso.web.module.rocketmq.constant.ENUM_TRANS_SERVICE;
//import com.lotso.web.module.rocketmq.entity.*;
//import com.lotso.web.module.rocketmq.service.IMqInfoLogService;
//import com.lotso.web.module.rocketmq.service.IMqlogService;
//import com.lotso.web.module.rocketmq.service.impl.TradeSingleChargeService;
//import com.lotso.web.module.rocketmq.service.impl.TradeSinglePayService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.rocketmq.common.message.MessageExt;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.util.StringUtils;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * ZhangZhaoYing
// * 2020-9-14
// * QueueConsumerLIS.java
// * 收付消息监听器，核心到收付
// */
//@Slf4j
//@MQConsumeService(topic= TopicEnum.LISTOSFNEW,tags={"*"})
//public class QueueConsumerLIS2 extends AbstractMQMsgProcessor {
//	@Autowired
//	ErrorToOther errorToOther;
//	@Autowired
//	IMqlogService mqlogService;
//	@Autowired
//	IMqInfoLogService mqInfoLogService;
//    @Autowired
//	private VerifyDuplicateRuleUtil verifyDuplicateRuleUtil;
//    @Autowired
//    private TradeSingleChargeService tradeSingleChargeService;
//    @Autowired
//    private TradeSinglePayService tradeSinglePayService;
//
//    private MQConsumeResult result = new MQConsumeResult();
//
//	@Override
//	protected MQConsumeResult consumeMessage(String tag, List<String> keys, MessageExt messageExt) {
//        String msg = new String(messageExt.getBody());
//        result.setSuccess(true);
//		TransData tTransData = null;
//		Mqlog mqlog = new Mqlog();
//        try {
//			log.info("核心收付费："+msg);
//			tTransData = JSON.parseObject(msg, TransData.class);
//			/**获取mqId*/
//			String mqId = tTransData.getMqId();
//			//操作类型
//			String operation = tTransData.getOperation();
//			//mq轨迹
//			mqlog = errorToOther.getMqlog(mqId,operation, TopicEnum.LISTOSF.getCode(), ENUM_MQSTATE.SFJSQD.getValue());
//			//mq报文
//			MqInfoLog mqInfoLog = errorToOther.getMqInfoLog(mqId,TopicEnum.LISTOSF.getCode(),"");
//			mqInfoLog.setJsoninfo(msg.getBytes("GBK"));
//			//存储mq轨迹和mq报文，存储出错返回核心
//			if(mqlogService.insertMQ(mqlog)<1 || mqInfoLogService.insertMQ(mqInfoLog)<1){
//				log.error("收付平台接收核心mq消息保存失败!");
//				errorToOther.sendErrorToLIS("收付平台接收核心mq消息保存失败",tTransData,"",TopicEnum.SFTOLIS.getCode(),mqlog);
//				return result;
//			}
//
//			//目前对于核心穿过来的需要校验Operation,其他平台根据队列名区分，不需要校验
//			if(StringUtils.isEmpty(mqlog.getOperation())){
//				log.error("收付费平台接收核心mq消息中收付类型有误!");
//				errorToOther.sendErrorToLIS("收付费平台接收核心mq消息中收付类型有误",tTransData,"",TopicEnum.SFTOLIS.getCode(),mqlog);
//				return result;
//			}
//			if(!ENUM_TRANS_SERVICE.serviceMap.containsKey(mqlog.getOperation())){
//				log.error("收付费平台接收核心mq消息中收付类型有误!");
//				errorToOther.sendErrorToLIS("收付费平台接收核心mq消息中收付类型有误",tTransData,"",TopicEnum.SFTOLIS.getCode(),mqlog);
//				return result;
//			}
//
//			if("SINGLELJAGET".equals(operation)){
//				if(tTransData.getLjagets() !=null && tTransData.getLjagets().getLjagetList()!=null){
//					log.info("单笔代付,Start......");
//					Ljaget tLjaget = tTransData.getLjagets().getLjagetList().get(0);
//					if(tLjaget == null){
//						log.info("收付费平台接收核心mq消息中无付费信息");
//						errorToOther.sendErrorToLIS("收付费平台接收核心mq消息中无付费信息",tTransData,"",TopicEnum.SFTOLIS.getCode(),mqlog);
//						return result;
//					}
//					//1、调用获取流水号
//					log.info("Step01...");
//					LisToSFParam param = new LisToSFParam("F",tLjaget,null);
//					String transno = SFSerialNoUtil.createSFSerialNo(param);
//					mqlog.setSfserialno(transno);
//					tLjaget.setTranno(transno);
//					//2、防重校验
//					log.info("Step02...");
//					String checkResult =verifyDuplicateRuleUtil.exeVerifyDuplicateRule(param);
//					if(!"TRUE".equals(checkResult)){
//						log.info("单笔代付防重规则校验失败");
//						TradeRequestDTO tradeRequestDTO = new TradeRequestDTO();
//						tradeRequestDTO.setBusinessDocumentCode(tLjaget.getTranno());
//						tradeRequestDTO.setBusinessId(tLjaget.getActugetno());
//						errorToOther.duplicateReturn(tradeRequestDTO,TopicEnum.SFTOLIS.getCode(),tTransData,mqlog);
//						return result;
//					}
//
//					tLjaget.setMaketime(DateUtil.dateToString(DateUtil.now(),DateUtil.TIME_PATTERN));
//					tLjaget.setModifydate(DateUtil.dateToString(DateUtil.now(),DateUtil.DATE_PATTERN));
//					tLjaget.setModifytime(DateUtil.dateToString(DateUtil.now(),DateUtil.TIME_PATTERN));
//					tLjaget.setOfflineSign("1");//塞入核心固定线上标志
//					Map<String,Object> map = new HashMap<String,Object>();
//					map.put("BusinessType", ENUM_BUSINESSTYPE.LIS.getValue());
//					map.put("Mqlog",mqlog);
//					tradeSinglePayService.service(tLjaget,map);
//				}
//			}
//
//			if("SINGLELJSPAY".equals(operation)){
//				if(tTransData.getLjspays() !=null && tTransData.getLjspays().getLjspayList()!=null){
//					log.info("单笔代扣,Start......");
//					Ljspay tLjspay = tTransData.getLjspays().getLjspayList().get(0);
//					if(tLjspay == null){
//						log.info("收付费平台接收核心mq消息中无收费信息");
//						errorToOther.sendErrorToLIS("收付费平台接收核心mq消息中无收费信息",tTransData,"",TopicEnum.SFTOLIS.getCode(),mqlog);
//						return result;
//					}
//					//1、调用获取流水号
//					log.info("Step01...");
//					LisToSFParam param = new LisToSFParam("S",null,tLjspay);
//					String transno = SFSerialNoUtil.createSFSerialNo(param);
//					mqlog.setSfserialno(transno);
//					tLjspay.setMaketime(DateUtil.dateToString(DateUtil.now(),DateUtil.TIME_PATTERN));
//					tLjspay.setModifydate(DateUtil.dateToString(DateUtil.now(),DateUtil.DATE_PATTERN));
//					tLjspay.setModifytime(DateUtil.dateToString(DateUtil.now(),DateUtil.TIME_PATTERN));
//					tLjspay.setOfflineSign("1");//塞入核心固定线上标志
//					tLjspay.setOnlineflag("1");
//					tLjspay.setBusinesstype("LIS");
//					Map<String,Object> map = new HashMap<String,Object>();
//					map.put("BusinessType", ENUM_BUSINESSTYPE.LIS.getValue());
//					map.put("transno",transno);
//					map.put("Mqlog",mqlog);
//					if(!tradeSingleChargeService.service(tLjspay,map)){
//						log.info("收付平台单笔代扣出错：调用支付平台前失败");
//						return result;
//					}
//				}
//			}
//			log.info("收付平台接收核心mq消息处理结束");
//        }catch(Exception e){
//            log.error("收付费平台其他异常！,错误信息:" + e.getMessage());
//		}
//		return result;
//	}
//
//}
